문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Windows 9x (문단 편집) == [[Windows NT]]과의 관계 == MS-DOS를 완전히 빼고 자체 커널을 사용하는 Windows NT 기반 운영체제는 9x와 구조가 매우 다르다. 1993년에 Windows 95 개발이 시작된 당시에는 Windows NT 3.1도 함께 개발되고 있었다. 기존의 DOS 기반 Windows(1.x, 2.x, 3.x)와 비교할 때 성능이랑 안정성 면에서는 Windows NT가 가장 우수했다. 하지만 구조가 완전히 달라져버린 관계로 DOS와 DOS 기반 Windows(1.x, 2.x, 3.x)용 프로그램이 제대로 동작하지 않는 문제가 있었다. 물론 이들 프로그램을 위해 VDM(Virtual DOS Machine)이나 WoW(Windows on Windows)[* 16비트 윈도우 프로그램용 호환계층이다. 홋날 64비트에서 기존 32비트 윈도우 프로그램의 실행을 지원하기 위해 존재하는 WoW64(Windows 32-Bit on Windows 64-Bit)와는 엄연히 다르다!]가 내장되어 있었지만 실제로 돌려오면 완벽하지 않았다. DOS 프로그램과 16비트 윈도우 프로그램이 Windows NT에서 제대로 동작하지 못하게된 원인에는 여러 원인이 있지만 16비트와 32비트의 차이와 하드웨어 직접 제어 제약이 가장 켰다. 16비트와 32비트의 코드가 서로 다르기에 16비트 코드를 32비트 코드로 변환시켜 실행시키는 에뮬레이팅을 거쳐야 하기에 성능의 일정 부분이 상실되었다. 그리고 Windows NT에서 프로그램이 하드웨어를 직접적으로 제어할 수 없는데 커널 모드과 사용자 모드과의 경계가 모호했던 DOS, DOS 기반 윈도우와 다르게 경계가 명확해지면서 오직 커널 모드에서만 하드웨어를 직접 제어할 수 있다. 그래서 일반 프로그램은 사용자 모드에서 실행되므로 직접 하드웨어를 제어할 수 없고 [[시스템 콜]]와 같은 방법으로 커널 모드 드라이버를 통해 간접적으로만 제어할 수 있다. 그리고 Windows NT는 본래 기업과 서버용으로 개발되었으며 가정용을 목표로 개발된게 아니었다. 따라서 마이크로소프트는 개인 사용자 시장에서 DOS 및 16비트 윈도우용 프로그램을 포기할 수 없었고 NT 커널 대신 DOS 기반으로 개발하기로 하면서 '호환성이 보장되는 범위 안에서 안정성을 확보'하는 식으로 방향을 정하게 되었다. 이렇게 Windows 95는 DOS 기반으로 개발되었으며 이후의 98, Me도 DOS 기반으로 개발되었다. 그래도 32비트 프로그램이 Windows NT에서도 호환될 수 있도록 했는데 다음과 같다. * Windows NT의 시스템 콜 라이브러리 파일인 ntdll.dll는 9x에서도 있다. * Windows NT는 [[유니코드]]를 사용하고 9x는 [[ANSI]]를 사용하여 문자열을 처리한다. Windows API 중에서 문자열을 취급하는 함수의 경우 함수 이름의 맨 뒤에 A(ANSI), W(유니코드)를 붙여 ANSI와 유니코드 버전이 존재하고 있다. 예를 들어 LoadLibrary의 경우 ANSI 버전은 LoadLibraryA이고 유니코드 버전은 LoadLibraryW이다. 각각 함수에서 취급하는 문자열 형식이 달라진다. Windows NT에서 ANSI 함수를 호출할 경우 내부적으로 유니코드로 변환한 후 유니코드 함수를 호출하며 반대로 9x의 경우 유니코드 함수를 호출할 시 내부적으로 ANSI로 변환시킨 후 ANSI 함수를 호출한다. 즉 Windows NT에서는 유니코드 함수, 9x에서는 ANSI 함수가 본래의 기능을 수행한다. 따라서 32비트 프로그램은 9x와 NT 사이에서 호환성이 있는게 '''원칙'''이다. 그런데 왜 원칙이냐고 하면 API는 똑같은데 안되는 경우가 꽤 있기 때문이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기